package com.duoec.doc.service;

import com.duoec.doc.dto.request.MockRequest;
import com.duoec.doc.dto.response.MockResponse;
import com.duoec.doc.entity.ApiEntity;
import com.duoec.doc.entity.MockConfig;

import java.util.List;

/**
 * @author xuwenzhen
 * @date 2020/1/31
 */
public interface MockService {
    /**
     * 保存mock配置
     *
     * @param mockConfig 需要保存的mock配置
     * @return 保存成功后的mock配置id
     */
    String save(MockConfig mockConfig);

    /**
     * 删除某个配置
     *
     * @param docId 文档ID
     * @param apiId 接口ID
     * @param mockId    需要删除的mock配置ID
     */
    void delete(String docId, String apiId, String mockId);

    /**
     * 获取某个接口的Mock配置
     *
     * @param docId 文档ID
     * @param apiId 接口ID
     * @return Mock配置简要信息列表
     */
    List<MockConfig> list(String docId, String apiId);

    /**
     * 获取某个接口某个Mock配置
     *
     * @param mockId mock配置ID
     * @return Mock配置详情
     */
    MockConfig get(String mockId);

    /**
     * 测试某个Mock配置
     *
     * @param mockId mock配置ID
     * @return Mock生成的数据（json）
     */
    String mock(String mockId);

    /**
     * 通过mock配置，生成mock响应
     * @param mockConfig mock配置
     * @return
     */
    String getMockResponse(MockConfig mockConfig);

    /**
     * 由服务端mock starter发过来的请求
     *
     * @param request 转发请求
     * @return mock响应
     */
    MockResponse restMock(MockRequest request);

    /**
     * 通过接口，获取默认的mock响应
     *
     * @param api 接口信息
     * @return mock响应
     */
    MockResponse mockByApi(ApiEntity api);
}
